【C语言】对字母加密与解密(简易)

/*
 * 从键盘输入一行字符,将其中的英文字母进行加密输出(非英文字母不用加密)。
 * 字符的加密就是借助字符可以进行算术运贫的思想来设计实现,加密的基本思想是,
 * 将原来的字符向后移动若干位 S 示 ,这个操作可以通过字符加上一个整数来实现,所加的整数由键盘上输入。
 * */
#include <stdio.h>
int main() {
    char ch = 'a';
    int key = 0;
    printf("请输入一个整数:\n");
    scanf("%d", &key);
    getchar();//没有这句话程序会自动终止,不会进行下面的getchar,这里相当于清楚了上面的回车产生的“\n” 详见http://blog.csdn.net/weixin_38239856/article/details/70768589

    printf("请输入一串字符:\n");
    do {
        ch = getchar();//当输入一串字符时,先放在缓存区,然后再一个一个取出
        if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
            ch = ch + key;
        }
        putchar(ch);
    }while(ch != '\n');
    return 0;
}
  • 13
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要实现RSA加密解密算法的C语言代码,你需要以下几个步骤: 1. 生成RSA密钥对: - 随机选择两个大素数 p 和 q。 - 计算 n = p * q。 - 计算 φ(n) = (p-1) * (q-1),其中 φ(n) 表示欧拉函数。 - 选择一个整数 e,满足 1 < e < φ(n),且 e 和 φ(n) 互质。 - 计算 d,使得 (d * e) ≡ 1 (mod φ(n)),即 d * e 除以 φ(n) 的余数为 1。 - 公钥为 (e, n),私钥为 (d, n)。 2. 加密: - 将明文转换为整数 M。 - 使用公钥 (e, n) 进行加密,计算密文 C = M^e % n。 3. 解密: - 使用私钥 (d, n) 进行解密,计算明文 M = C^d % n。 下面是一个简单的示例代码: ```c #include <stdio.h> // 求最大公约数 int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); } // 求模逆元 int mod_inverse(int a, int m) { int m0 = m, t, q; int x0 = 0, x1 = 1; if (m == 1) return 0; while (a > 1) { q = a / m; t = m; m = a % m; a = t; t = x0; x0 = x1 - q * x0; x1 = t; } if (x1 < 0) x1 += m0; return x1; } // 加密 int encrypt(int message, int e, int n) { int ciphertext = 1; for (int i = 0; i < e; i++) { ciphertext = (ciphertext * message) % n; } return ciphertext; } // 解密 int decrypt(int ciphertext, int d, int n) { int message = 1; for (int i = 0; i < d; i++) { message = (message * ciphertext) % n; } return message; } int main() { int p = 61; // 第一个大素数 int q = 53; // 第二个大素数 int n = p * q; int phi_n = (p - 1) * (q - 1); int e = 17; // 选择一个与 phi(n) 互质的数,常用公钥指数 int d = mod_inverse(e, phi_n); // 计算私钥指数 // 明文和密文 int message = 123; int ciphertext = encrypt(message, e, n); int decrypted_message = decrypt(ciphertext, d, n); printf("明文: %d\n", message); printf("密文: %d\n", ciphertext); printf("解密后的明文: %d\n", decrypted_message); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘星燎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值